typedef struct{
char *name;
char suid[8];
int numUnits;
} student;
student friends[4]; 1
friends[0].name = friends[2].suid + 3; 2
friends[5].num Units = 21; 3
strcpy(friends[1].suid, "4041554"); 4
strcpy(friends->name, "Tiger Woods"); 5
strcpy((char *) &friends[0].num Units, (const char *) &friends[2].numUnits); 6
看这个结构体,它有三个变量:name是一个指向串的指针,suid是一个字符数组名,numUnits是一个整形的变量,每个student结构体占用的内存空间是:name:4;suid:8;numUnits:4;共16个字节。
1定义了四个student结构体,在内存中划出了4*16字节大小的空间
2表示把第三个结构体的suid字符数组的第三个字符的地址,赋值给第一个结构体的name指针
3是说以数组friends首地址为基准向后偏移16*5个字节达到第六个结构体的首地址,虽然这个地址未分配但是仍然可以使用,然后赋值21给这个结构体的numUnits变量
4可以这样理解把长度为七的一个串复制到第20个字节的首地址,如果friends的值为0
5表示在某个内存空间开辟一个大小为12字节的空间存放串“Tiger Woods”,然后把它复制到第1个字节开始的地方写入结束于第一个结构体的suid的最后一个字符,就是地址为12
6是说提取第三个结构体的numUnits的首地址也就是60,把它转化为字符串型的地址,就是把numUnits中的整形化为字符型,然后复制到第一个结构体的numUnits的首地址12上,复制之前需把它转化成为字符型地址。